<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
                template="./templates/templateHome.xhtml"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:p="http://primefaces.org/ui"
                xmlns:h="http://xmlns.jcp.org/jsf/html"
                xmlns:f="http://xmlns.jcp.org/jsf/core">

    <ui:define name="title">
        Usuário
    </ui:define>

    <ui:define name="content">

        <p:growl id="growlUsuario" life="5000" showDetail="true"/>

        <h:form rendered="#{loginBean.exibeFuncaoAdm}">
            <p:commandButton id="btnCriarUsuario" title="Criar um usuário" label="Criar" value="Criar"
                             icon="icon-criar-usuario" oncomplete="dialogCriarUsuario.show()"/>
        </h:form>

        <h:form id="formDataTableUsuario" rendered="#{loginBean.exibeFuncaoAdm}">
            <p:dataTable id="dataTableUsuario" selectionMode="single" paginator="true" rows="10"
                         paginatorPosition="bottom" paginatorTemplate="{CurrentPageReport} {FirstPageLink}
                         {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                         paginatorAlwaysVisible="false"
                         rowKey="#{usuario.nomeUsuario}" selection="#{usuarioBean.usuarioSelecionado}"
                         var="usuario" value="#{usuarioBean.lista}">

                <f:facet name="header">  
                    Lista de Usuários  
                </f:facet>

                <p:column headerText="Nome de Usuário">
                    <h:outputText value="#{usuario.nomeUsuario}"/>
                </p:column>

                <!--<p:column headerText="Código da Função">
                    <h:outputText value="{usuario.funcao.codFuncao}"/>
                </p:column>-->

                <p:column headerText="Função" style="width:10%">
                    <h:outputText value="#{usuario.funcao.nome}"/>
                </p:column>

                <p:column headerText="Senha" style="width:10%">
                    <h:outputText value="#{usuario.senha}"/>
                </p:column>

                <p:column headerText="Estado" style="width:10%">
                    <h:outputText value="#{usuario.estado}"/>
                </p:column>

                <p:column headerText="Cadastro" style="width:10%">
                    <h:outputText value="#{usuario.dataCriacao}">
                        <f:convertDateTime dateStyle="medium"/>
                    </h:outputText>
                </p:column>

                <p:column headerText="Nome" filterBy="#{usuario.nome}" style="width:20%">
                    <h:outputText value="#{usuario.nome}"/>
                </p:column>

                <p:column headerText="CPF" style="width:10%">
                    <h:outputText value="#{usuario.cpf}"/>
                </p:column>

                <p:column headerText="Endereço" style="width:10%">
                    <h:outputText value="#{usuario.endereco}"/>
                </p:column>

                <p:column headerText="E-mail" style="width:10%">
                    <h:outputText value="#{usuario.email}"/>
                </p:column>

                <p:column headerText="Telefone" style="width:10%">
                    <h:outputText value="#{usuario.telefone}"/>
                </p:column>

                <p:column headerText="Ações">
                    <p:panelGrid columns="2">
                        <p:commandButton id="btnAlterarUsuario" title="Alterar o usuário" label="Alterar o usuário"
                                         icon="icon-editar" oncomplete="dialogAlterarUsuario.show()"
                                         update=":formAlterarUsuario">
                            <f:setPropertyActionListener value="#{usuario}" target="#{usuarioBean.usuarioSelecionado}"/>                                
                        </p:commandButton>

                        <p:commandButton id="btnExcluirUsuario" title="Excluir o usuário" label="Excluir o usuário"
                                         icon="icon-excluir-usuario" oncomplete="dialogExcluirUsuario.show()"
                                         update=":formExcluirUsuario">
                            <f:setPropertyActionListener value="#{usuario}" target="#{usuarioBean.usuarioSelecionado}"/>                                
                        </p:commandButton>
                    </p:panelGrid>
                </p:column>

            </p:dataTable>
        </h:form>

        <h:form id="formCriarUsuario">
            <p:dialog id="dialogCriarUsuario" header="Criar Usuário" widgetVar="dialogCriarUsuario" resizable="false"
                      showEffect="size" hideEffect="blind" modal="true" draggable="false">
                <h:panelGrid id="panelGridCriarUsuario" columns="2" cellpadding="4" style="margin:0 auto;">

                    <h:outputLabel for="nomeUsuarioCriarUsuario" value="* Nome Usuário:"/>
                    <p:inputText id="nomeUsuarioCriarUsuario" title="Nome de usuário" label="Nome de usuário" required="true"
                                 requiredMessage="Por favor informe o nome de usuário."
                                 validatorMessage="Nº mínimo de caracteres do campo 'Nome usuário': 4"
                                 value="#{usuarioBean.usuarioSelecionado.nomeUsuario}">
                        <p:watermark for="nomeUsuarioCriarUsuario" value="Nome de usuário"/>
                        <p:message for="nomeUsuarioCriarUsuario"/>
                        <f:validateLength minimum="4" maximum="10"/>
                    </p:inputText>

                    <h:outputLabel for="funcaoCriarUsuario" value="* Função:"/>
                    <p:selectOneMenu id="funcaoCriarUsuario" required="true"
                                     requiredMessage="Por favor informe a função do usuário."
                                     value="#{usuarioBean.usuarioSelecionado.funcao.codFuncao}">                                               
                        <f:selectItem itemLabel="- Selecione -" itemValue=""/>  
                        <f:selectItems value="#{funcaoBean.selecionarUmItemFuncao}"/>
                        <p:message for="funcaoCriarUsuario"/>
                    </p:selectOneMenu>

                    <h:outputLabel for="senhaCriarUsuario" value="* Senha:"/>
                    <p:password id="senhaCriarUsuario" title="Senha do usuário" label="Senha do usuário" required="true"
                                requiredMessage="Por favor insira a senha do usuário."
                                match ="senhaConfirmarCriarUsuario" validatorMessage="As senhas não correspondem."
                                value="#{usuarioBean.usuarioSelecionado.senha}">
                        <p:message for="senhaCriarUsuario"/>
                        <f:validateLength minimum="4" maximum="10"/>
                    </p:password>

                    <h:outputLabel for="senhaConfirmarCriarUsuario" value="* Confirmar Senha:"/>
                    <p:password id="senhaConfirmarCriarUsuario" title="Confirme a senha" label="Confirmar senha" required="true"
                                requiredMessage="Por favor confirme a senha."
                                validatorMessage="Nº mínimo de caracteres do campo 'Senha': 4"
                                value="#{usuarioBean.usuarioSelecionado.senha}">
                        <p:message for="senhaConfirmarCriarUsuario"/>
                        <f:validateLength minimum="4" maximum="10"/>
                    </p:password>

                    <h:outputLabel for="estadoCriarUsuario" value="* Estado:"/>
                    <p:selectOneMenu id="estadoCriarUsuario" required="true"
                                     requiredMessage="Por favor informe o estado do usuário."
                                     value="#{usuarioBean.usuarioSelecionado.estado}">
                        <f:selectItem itemLabel="- Selecione -" itemValue=""/>
                        <f:selectItem itemLabel="Ativado" itemValue="A"/>  
                        <f:selectItem itemLabel="Desativado" itemValue="D"/>
                        <p:message for="estadoCriarUsuario"/>
                    </p:selectOneMenu>

                    <h:outputLabel for="nomeCriarUsuario" value="* Nome:"/>
                    <p:inputText id="nomeCriarUsuario" title="Nome completo do usuário" label="Nome da pessoa" required="true"
                                 requiredMessage="Por favor insira o nome e sobrenome do usuário."
                                 value="#{usuarioBean.usuarioSelecionado.nome}">
                        <p:watermark for="nomeCriarUsuario" value="Nome e sobrenome"/>
                        <p:message for="nomeCriarUsuario"/>
                    </p:inputText>

                    <h:outputLabel for="cpfCriarUsuario" value="* CPF: "/>  
                    <p:inputMask id="cpfCriarUsuario" title="CPF do usuário" label="CPF do usuário" mask="999.999.999-99"
                                 required="true" requiredMessage="Por favor insira o CPF do usuário."
                                 value="#{usuarioBean.usuarioSelecionado.cpf}">
                        <p:watermark for="cpfCriarUsuario" value="Somente números"/>
                        <f:validator validatorId="cpf"/>
                        <p:message for="cpfCriarUsuario"/>
                    </p:inputMask>

                    <h:outputLabel for="endCriarUsuario" value="Endereço:"/>
                    <p:inputText id="endCriarUsuario" title="Endereço do usuário" label="Endereço do usuário"
                                 value="#{usuarioBean.usuarioSelecionado.endereco}">
                        <p:watermark for="endCriarUsuario" value="Endereço completo"/>
                    </p:inputText>

                    <h:outputLabel for="emailCriarUsuario" value="* E-mail:"/>
                    <p:inputText id="emailCriarUsuario" title="E-mail" label="E-mail do usuário"
                                 validatorMessage="Formato de e-mail inválido."
                                 requiredMessage="Por favor insira o endereço de e-mail do usuário."
                                 value="#{usuarioBean.usuarioSelecionado.email}" required="true">
                        <f:validateRegex
                            pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$"/>
                        <p:watermark for="emailCriarUsuario" value="ex: user@mail.com" />
                        <p:message for="emailCriarUsuario"/>
                    </p:inputText>

                    <h:outputLabel for="telCriarUsuario" value="Telefone:"/>
                    <p:inputMask id="telCriarUsuario" title="Telefone do usuário" label="Telefone do usuário"
                                 mask="(99)9999-9999"
                                 value="#{usuarioBean.usuarioSelecionado.telefone}">
                        <p:watermark for="telCriarUsuario" value="Telefone com DDD"/>
                    </p:inputMask>

                    <f:facet name="footer">
                        <p:separator/>
                        <center>
                            <p:commandButton id="btnAceitarCriarUsuario" title="Salvar o usuário" label="Salvar" value="Salvar"
                                             icon="icon-salvar" oncomplete="dialogCriarUsuario.hide()"
                                             update=":growlUsuario, :formDataTableUsuario"
                                             validateClient="true"
                                             actionListener="#{usuarioBean.btnCriarUsuario(actionEvent)}"/>
                            <p:commandButton id="btnCancelarCriarUsuario" title="Cancelar" label="Cancelar" value="Cancelar"
                                             icon="icon-cancelar" oncomplete="dialogCriarUsuario.hide()"/>
                        </center>
                    </f:facet>

                </h:panelGrid>
            </p:dialog>
        </h:form>

        <h:form id="formAlterarUsuario">
            <p:dialog id="dialogAlterarUsuario" header="Alterar Usuário" widgetVar="dialogAlterarUsuario" resizable="false"
                      showEffect="fade" hideEffect="explode" modal="true" draggable="false">
                <h:inputHidden value="#{usuarioBean.usuarioSelecionado.nomeUsuario}"/>
                <h:panelGrid id="panelGridAlterarUsuario" columns="2" cellpadding="4" style="margin:0 auto;">

                    <h:outputLabel for="nomeUsuarioAlterarUsuario" value="Nome Usuário:"/>
                    <p:outputLabel id="nomeUsuarioAlterarUsuario" value="#{usuarioBean.usuarioSelecionado.nomeUsuario}"/>

                    <h:outputLabel for="funcaoAlterarUsuario" value="* Função:"/>
                    <p:selectOneMenu id="funcaoAlterarUsuario" required="true"
                                     requiredMessage="Por favor informe a função do usuário."
                                     value="#{usuarioBean.usuarioSelecionado.funcao.codFuncao}">
                        <f:selectItem itemLabel="- Selecione -" itemValue=""/>  
                        <f:selectItems value="#{funcaoBean.selecionarUmItemFuncao}"/>
                        <p:message for="funcaoAlterarUsuario"/>
                    </p:selectOneMenu>

                    <h:outputLabel for="senhaAlterarUsuario" value="* Senha:"/>
                    <p:password id="senhaAlterarUsuario" title="Senha do usuário" label="Senha do usuário" required="true"
                                requiredMessage="Por favor insira a senha do usuário."
                                match ="senhaConfirmarAlterarUsuario" validatorMessage="As senhas não correspondem."
                                value="#{usuarioBean.usuarioSelecionado.senha}">
                        <p:message for="senhaAlterarUsuario"/>
                        <f:validateLength minimum="4" maximum="10"/>
                    </p:password>

                    <h:outputLabel for="senhaConfirmarAlterarUsuario" value="* Confirmar Senha:"/>
                    <p:password id="senhaConfirmarAlterarUsuario" title="Confirme a senha" label="Confirmar senha" required="true"
                                requiredMessage="Por favor confirme a senha."
                                validatorMessage="Nº mínimo de caracteres do campo 'Senha': 4"
                                value="#{usuarioBean.usuarioSelecionado.senha}">
                        <p:message for="senhaConfirmarAlterarUsuario"/>
                        <f:validateLength minimum="4" maximum="10"/>
                    </p:password>

                    <h:outputLabel for="estadoAlterarUsuario" value="* Estado:"/>
                    <p:selectOneMenu id="estadoAlterarUsuario" required="true"
                                     requiredMessage="Por favor informe o estado do usuário."
                                     value="#{usuarioBean.usuarioSelecionado.estado}">
                        <f:selectItem itemLabel="- Selecione -" itemValue=""/>
                        <f:selectItem itemLabel="Ativado" itemValue="A"/>  
                        <f:selectItem itemLabel="Desativado" itemValue="D"/>
                        <p:message for="estadoAlterarUsuario"/>
                    </p:selectOneMenu>

                    <h:outputLabel for="nomeAlterarUsuario" value="* Nome:"/>
                    <p:inputText id="nomeAlterarUsuario" title="Nome" label="Nome da pessoa" required="true"
                                 requiredMessage="Por favor insira o nome e sobrenome do usuário."
                                 value="#{usuarioBean.usuarioSelecionado.nome}">
                        <p:watermark for="nomeAlterarUsuario" value="Nome e sobrenome"/>
                        <p:message for="nomeAlterarUsuario"/>
                    </p:inputText>

                    <h:outputLabel for="cpfAlterarUsuario" value="* CPF: "/>  
                    <p:inputMask id="cpfAlterarUsuario" title="CPF" label="CPF do usuário" mask="999.999.999-99"
                                 required="true" requiredMessage="Por favor insira o CPF do usuário."
                                 value="#{usuarioBean.usuarioSelecionado.cpf}">
                        <p:watermark for="cpfAlterarUsuario" value="Somente números - CPF válido"/>
                        <f:validator validatorId="cpf"/>
                        <p:message for="cpfAlterarUsuario"/>
                    </p:inputMask>

                    <h:outputLabel for="endAlterarUsuario" value="Endereço:"/>
                    <p:inputText id="endAlterarUsuario" title="Endereço do usuário" label="Endereço do usuário"
                                 value="#{usuarioBean.usuarioSelecionado.endereco}">
                        <p:watermark for="endAlterarUsuario" value="Endereço completo"/>
                    </p:inputText>

                    <h:outputLabel for="emailAlterarUsuario" value="* E-mail:"/>
                    <p:inputText id="emailAlterarUsuario" title="E-mail" label="E-mail do usuário"
                                 validatorMessage="Formato de e-mail inválido"
                                 required="true" requiredMessage="Por favor insira o endereço de e-mail do usuário."
                                 value="#{usuarioBean.usuarioSelecionado.email}">
                        <f:validateRegex
                            pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$"/>
                        <p:watermark for="emailAlterarUsuario" value="ex: user@mail.com" />
                        <p:message for="emailAlterarUsuario"/>
                    </p:inputText>

                    <h:outputLabel for="telAlterarUsuario" value="Telefone:"/>
                    <p:inputMask id="telAlterarUsuario" title="Telefone do usuário" label="Telefone do usuário"
                                 mask="(99)9999-9999"
                                 value="#{usuarioBean.usuarioSelecionado.telefone}">
                        <p:watermark for="telAlterarUsuario" value="Telefone com DDD"/>
                    </p:inputMask>

                    <f:facet name="footer">
                        <p:separator/>
                        <center>
                            <p:commandButton id="btnAceitarAlterarUsuario" title="Alterar o usuário" label="Alterar" value="Alterar"
                                             icon="icon-salvar" oncomplete="dialogAlterarUsuario.hide()"
                                             update=":growlUsuario, :formDataTableUsuario"
                                             validateClient="true"
                                             actionListener="#{usuarioBean.btnAlterarUsuario(actionEvent)}"/>
                            <p:commandButton id="btnCancelarAlterarUsuario" title="Cancelar a alteração" label="Cancelar" value="Cancelar"
                                             icon="icon-cancelar" oncomplete="dialogAlterarUsuario.hide()"/>
                        </center>
                    </f:facet>

                </h:panelGrid>
            </p:dialog>
        </h:form>

        <h:form id="formExcluirUsuario">
            <p:confirmDialog id="confirmDialogUsuario" header="Exclusão de usuário" widgetVar="dialogExcluirUsuario"
                             showEffect="bounce" hideEffect="drop" severity="alert"
                             message="Tem certeza que deseja excluir o usuário #{usuarioBean.usuarioSelecionado.nomeUsuario}?">
                <h:inputHidden value="#{usuarioBean.usuarioSelecionado.nomeUsuario}"/>
                <center>
                    <p:commandButton id="confirmarExcluirUsuario" title="Confirmar a exclusão do usuário" label="Excluir" value="Confirmar"
                                     icon="icon-confirmar" oncomplete="dialogExcluirUsuario.hide()" 
                                     update=":growlUsuario, :formDataTableUsuario"
                                     actionListener="#{usuarioBean.btnExcluirUsuario(actionEvent)}"/>                            
                    <p:commandButton id="cancelarExcluirUsuario" title="Cancelar a exclusão do usuário" label="Cancelar" value="Cancelar"
                                     icon="icon-cancelar" oncomplete="dialogExcluirUsuario.hide()"/>
                </center>
            </p:confirmDialog>
        </h:form>

    </ui:define>

</ui:composition>